package com.example.javaproject.datastructure.stack;


/**
 * 　　产生的问题：
 * <p>
 * 　　①、上面栈的实现初始化容量之后，后面是不能进行扩容的（虽然栈不是用来存储大量数据的），如果说后期数据量超过初始容量之后怎么办？（自动扩容）
 * <p>
 * 　　②、我们是用数组实现栈，在定义数组类型的时候，也就规定了存储在栈中的数据类型，那么同一个栈能不能存储不同类型的数据呢？（声明为Object）
 * <p>
 * 　　③、栈需要初始化容量，而且数组实现的栈元素都是连续存储的，那么能不能不初始化容量呢？（改为由链表实现）
 * <p>
 *     {@link ArrayStack 增强版本实现}
 * Description:
 * <br>Author：tian
 * <br>Time: 2019/3/11 16:39
 */
public class MyStack {

    private int[] array;
    private int maxSize;
    private int top;

    public MyStack(int size) {
        this.maxSize = size;
        array = new int[maxSize];
        top = -1;
    }

    /**
     * 压入数据
     *
     * @param value
     */
    public void push(int value) {
        if (top < maxSize - 1) {
            array[++top] = value;
        }
    }

    /**
     * 弹出栈
     *
     * @return
     */
    public int pop() {
        return array[top--];
    }

    /**
     * 访问栈顶数据
     *
     * @return
     */
    public int peek() {
        return array[top];
    }

    public boolean isEmpty() {
        return top == -1;
    }

    public boolean isFull() {
        return top == (maxSize - 1);
    }

    public static void main(String[] args) {
        MyStack stack = new MyStack(3);
        stack.push(1);
        stack.push(2);
        stack.push(3);
        System.out.println(stack.peek());
        while (!stack.isEmpty()) {
            System.out.println(stack.pop());
        }

    }
}
